import {
  getSetting,
  chooseAddress,
  openSetting,
  showModal,
  showToast,
} from "../../utils/asyncWx.js";
/**
 * 1, 获取用户收货地址
 *   1>绑定点击事件
 *   2> 调用小程序内置API 获取用户收货信息
 *   3> 将返回地址存入storage
 * 2, 页面加载完毕(onShow)
 *    1> 获取本地存储中的数据
 *    2> 把数据设置给data中的一个变量
 * 3, 页面onShow的时候渲染购物车数据
 *    1> 获取欢村中购物车数组
 *    2> 把购物车数据填充到data中
 * 4, 全选实现 数据展示
 *    1> onShow获取本地存储中购物车数组
 *    2> 根据购物车中商品的数据 以及checked=true计算总价
 *
 */

Page({
  data: {
    address: {},
    cart: [],
    allChecked: false,
    totalPrice: 0,
    totalNum: 0,
  },

  onShow() {
    //1 获取本地存储中的收货地址信息
    let address = wx.getStorageSync("address");
    //address.all=address.provinceName+address.cityName+address.countyName+address.detailInfo
    //获取本地存储中的购物车数据
    let cart = wx.getStorageSync("cart") || [];
    //计算全选
    //every是数组方法，会遍历 会接收一个回调函数， 每一个回调函数都返回true了，那么every
    //返回true,只要有一个回调函数返回了false ，那么不再循环执行，直接返回false
    //空数组调用了every 返回值true
    //const allChecked=cart.length?cart.every(v=>v.checked):false;
    this.setData({ address });
    this.setCart(cart);
  },

  //点击收货地址按钮
  async handleChooseAddress() {
    //2 获取收货地址信息，存入本地存储
    const address = await chooseAddress();
    wx.setStorageSync("address", address);
  },

  //商品的选中（复选框）
  handleItemChange(e) {
    //1, 获取被修改的商品的id
    const goods_id = e.currentTarget.dataset.id;
    //2, 获取购物车数组
    let { cart } = this.data;
    //3, 找到被修改的商品对象
    let index = cart.findIndex((v) => v.goods_id === goods_id);
    //4, 选中状态取反
    cart[index].checked = !cart[index].checked;
    //5,更新底部工具栏
    this.setCart(cart);
  },

  //抽取底部工具栏 总价和数量的获取
  setCart(cart) {
    //更新总数量和总价格
    let allChecked = true;
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach((v) => {
      if (v.checked) {
        totalPrice += v.num * v.goods_price;
        totalNum += v.num;
      } else {
        allChecked = false;
      }
    });
    //判断数组是否为空
    allChecked = cart.length != 0 ? allChecked : false;
    this.setData({
      cart,
      totalPrice,
      totalNum,
      allChecked,
    });
    wx.setStorageSync("cart", cart);
  },

  //商品的全选功能
  handleItemAllCheck() {
    //1,获取data中的数据
    let { cart, allChecked } = this.data;
    //2,修改值
    allChecked = !allChecked;
    //3,循环修改cart数组 中的商品选中状态
    cart.forEach((v) => (v.checked = allChecked));
    //4, 把修改后的值填充回data 或者缓存中
    this.setCart(cart);
  },

  //商品数量编辑
  async handleItemNumEdit(e) {
    //1,获取传递过来的参数
    const { operation, id } = e.currentTarget.dataset;
    //2，获取购物车数据
    let { cart } = this.data;
    //3， 找到需要修改的商品索引
    const index = cart.findIndex((v) => v.goods_id === id);
    //判断是否要执行删除
    if (cart[index].num === 1 && operation === -1) {
      //弹窗提示
      const res = await showModal({ content: "您是否要删除？" });
      if (res.confirm) {
        cart.splice(index, 1);
        this.setCart(cart);
      }
    } else {
      //4, 修改数量
      cart[index].num += operation;
      //5,设置回缓存和data中
      this.setCart(cart);
    }
  },

  //点击结算
 async handlePay(){
    //1，判断收货地址
    const {address,totalNum}=this.data;
    if(!address.userName){
      await showToast({title:"您还没有选择收货地址"})
      return;
    }
    //2, 判断用户有没有选购商品(data.totalNum)
    if(totalNum===0){
      await showToast({title:"您还没有选购商品"})
      return;
    }
    //3，跳转到支付页面
    wx.navigateTo({
      url: '/pages/pay/index'
    });

  }
});
